Ответы на этот вопрос являются результатом усилий сообщества. Отредактируйте существующие ответы, чтобы улучшить этот пост. В настоящее время он не принимает новые ответы или взаимодействия. Я неправильно написал в сообщении о коммите. Как я могу изменить сообщение? Коммит еще не отправлен.
2020-12-07 22:14:43
Изменение самого последнего сообщения фиксации git commit --amend откроет ваш редактор, что позволит вам изменить сообщение о самой последней фиксации. Кроме того, вы можете установить сообщение фиксации прямо в командной строке с помощью: git commit --amend -m "Новое сообщение фиксации" … Однако это может сделать многострочные сообщения фиксации или небольшие исправления более громоздкими для ввода. Перед этим убедитесь, что у вас нет внесенных изменений в рабочую копию, иначе они тоже будут зафиксированы. (Неустановленные изменения не фиксируются.) Изменение сообщения коммита, который вы уже отправили в удаленную ветку Если вы уже отправили коммит в свою удаленную ветку, то - после внесения изменений в коммит локально (как описано выше) - вам также необходимо принудительно отправить коммит с помощью: git push <удаленный> <ветка> --force # Или git push <удаленный> <ветка> -f Предупреждение: принудительное нажатие перезапишет удаленную ветку с состоянием вашей локальной. Если в удаленной ветке есть коммиты, которых нет в вашей локальной ветке, вы потеряете эти коммиты. Предупреждение: будьте осторожны при внесении изменений в коммиты, которыми вы уже поделились с другими людьми. Внесение изменений в коммиты по существу переписывает их, чтобы они имели другие идентификаторы SHA, что создает проблему, если у других людей есть копии старого коммита, который вы переписали. Любой, у кого есть копия старого коммита, должен будет синхронизировать свою работу с вашим недавно переписанным коммитом, что иногда может быть сложно, поэтому убедитесь, что вы координируете свои действия с другими при попытке переписать общую историю коммитов, или просто избегайте переписывания общих коммитов. все вместе. Выполните интерактивную перебазировку Другой вариант - использовать интерактивную перебазировку. Это позволяет вам редактировать любое сообщение, которое вы хотите обновить, даже если это не последнее сообщение. Чтобы сделать сквош Git, выполните следующие действия: // n - количество коммитов до последнего коммита, который вы хотите редактировать git rebase -i HEAD ~ n Как только вы раздавите свои коммиты - выберите e / r для редактирования сообщения: Важное примечание об интерактивном перебазировании Когда вы используете git rebase -i HEAD ~ n, может быть более n коммитов. Git «соберет» все коммиты в последних n коммитах, и если где-то между этим диапазоном произошло слияние, вы также увидите все коммиты, поэтому результат будет n +. Хороший совет: Если вам нужно сделать это для более чем одной ветки и вы можете столкнуться с конфликтами при изменении содержимого, настройте git rerere и позвольте Git разрешить эти конфликты автоматически. Документация git-commit (1) Страница руководства git-rebase (1) Страница руководства git-push (1) Страница руководства | git commit --amend -m "ваше новое сообщение" | Если фиксация, которую вы хотите исправить, не самая последняя: git rebase --interactive $ parent_of_flawed_commit Если вы хотите исправить несколько ошибочных коммитов, передайте родительский элемент самого старого из них. Появится редактор со списком всех коммитов, начиная с того, что вы дали. Измените pick на reword (или в старых версиях Git для редактирования) перед любыми коммитами, которые вы хотите исправить. После сохранения Git воспроизведет перечисленные коммиты. Для каждого коммита, который вы хотите переформулировать, Git вернет вас обратно в ваш редактор. Для каждого коммита, который вы хотите отредактировать, Git помещает вас в оболочку. Если вы в оболочке: Измените фиксацию как хотите. git commit --amend git rebase - продолжить Большая часть этой последовательности будет объяснена вам по ходу выполнения различных команд. Это очень просто; вам не нужно его запоминать - просто помните, что git rebase --interactive позволяет исправлять коммиты независимо от того, как давно они были. Обратите внимание, что вы не захотите изменять уже отправленные вами коммиты. Или, может быть, вы это сделаете, но в этом случае вам придется очень внимательно общаться со всеми, кто, возможно, вытащил ваши коммиты и проделал работу поверх них. Как мне восстановить / повторно синхронизировать после того, как кто-то нажмет на перебазирование или сброс на опубликованную ветку? | Чтобы исправить предыдущую фиксацию, внесите нужные изменения и выполните эти изменения, а затем запустите git commit --amend В вашем текстовом редакторе откроется файл, представляющий ваше новое сообщение фиксации. Он начинается с текста из вашего старого сообщения фиксации. Измените сообщение фиксации по своему усмотрению, затем сохраните файл и выйдите из редактора, чтобы закончить. Чтобы изменить предыдущую фиксацию и сохранить то же сообщение журнала, запустите git commit --amend -C HEAD Чтобы исправить предыдущую фиксацию, полностью удалив ее, запустите git reset --hard HEAD ^ Если вы хотите отредактировать более одного сообщения фиксации, запустите git rebase -i HEAD ~ commit_count (Замените commit_count числом коммитов, которые вы хотите отредактировать.) Эта команда запускает ваш редактор. Отметьте первую фиксацию (ту, которую вы хотите изменить) как «редактировать» вместо «выбрать», затем сохраните и выйдите из редактора. Внесите изменения, которые хотите зафиксировать, а затем запустите git commit --amend git rebase - продолжить Примечание. Вы также можете «Внести нужные изменения» в редакторе, открываемом командой git commit --amend | Как ужеКак уже упоминалось, git commit --amend - это способ перезаписать последний коммит. Одно замечание: если вы хотите также перезаписать файлы, команда будет git commit -a --amend -m "Мое новое сообщение фиксации" | Вы также можете использовать для этого git filter-branch. git filter-branch -f --msg-filter "sed 's / errror / error /'" $ flawed_commit..HEAD Это не так просто, как тривиальный git commit --amend, но он особенно полезен, если у вас уже есть несколько слияний после вашего ошибочного сообщения о фиксации. Обратите внимание, что это попытается переписать каждую фиксацию между HEAD и ошибочной фиксацией, поэтому вы должны очень разумно выбирать команду msg-filter ;-) | Я предпочитаю такой способ: git commit --amend -c <идентификатор фиксации> В противном случае будет новая фиксация с новым идентификатором фиксации. | Если вы используете инструмент с графическим интерфейсом пользователя Git, есть кнопка «Изменить последнюю фиксацию». Нажмите на эту кнопку, и тогда отобразятся ваши последние файлы фиксации и сообщение. Просто отредактируйте это сообщение, и вы можете зафиксировать его с новым сообщением фиксации. Или используйте эту команду из консоли / терминала: git commit -a --amend -m "Мое новое сообщение фиксации" | Вы можете использовать Git rebase. Например, если вы хотите изменить обратно, чтобы зафиксировать bbc643cd, запустите $ git rebase bbc643cd ^ - интерактивный В редакторе по умолчанию измените 'pick' на 'edit' в строке, фиксацию которой вы хотите изменить. Внесите изменения, а затем выполните их с помощью $ git addТеперь вы можете использовать $ git commit --amend чтобы изменить фиксацию, а после этого $ git rebase - продолжить чтобы вернуться к предыдущей фиксации головы. | Если вы хотите изменить только последнее сообщение о фиксации, выполните: git commit --amend Вы попадете в текстовый редактор и сможете изменить последнее сообщение фиксации. Если вы хотите изменить последние три сообщения фиксации или любое из сообщений фиксации до этого момента, укажите HEAD ~ 3 команде git rebase -i: git rebase -i ГОЛОВКА ~ 3 | Если вам нужно изменить старое сообщение фиксации в нескольких ветках (т.е. фиксация с ошибочным сообщением присутствует в нескольких ветках), вы можете использовать: git filter-branch -f --msg-filter \ 'sed "s / <старое сообщение> / <новое сообщение> / g"' - --all Git создаст временный каталог для перезаписи и дополнительного резервного копирования старых ссылок в refs / original /. -f принудительно выполнит операцию. Это необходимо, если временный каталог уже существует или уже есть ссылки, хранящиеся в refs / original. Если это не так, вы можете сбросить этот флаг. - отделяет параметры ветвления фильтра от параметров редакции. --all обеспечит перезапись всех веток и тегов. Благодаря резервному копированию ваших старых ссылок вы можете легко вернуться в состояние до выполнения команды. Скажем, вы хотите восстановить своего мастера и получить к нему доступ в ветке old_master: git checkout -b old_master refs / original / refs / heads / master | Использовать git commit --amend Чтобы разобраться в этом подробно, отличный пост - 4. Переписываем историю Git. Также здесь говорится о том, когда не следует использовать git commit --amend. | Если это ваша последняя фиксация, просто измените фиксацию: git commit --amend -o -m "Новое сообщение фиксации" (Использование флага -o (--only), чтобы убедиться, что вы изменяете только сообщение фиксации) Если это скрытая фиксация, используйте потрясающую интерактивную перебазировку: git rebase -i @ ~ 9 # Показать последние 9 коммитов в текстовом редакторе Найдите нужную фиксацию, измените pick на r (reword), сохраните и закройте файл. Выполнено! Миниатюрное руководство по Vim (или, как выполнить перебазирование всего 8 нажатиями клавиш 3jcwrEscZZ): Запускаем vimtutor если есть время hjkl соответствуют клавишам перемещения ← ↓ ↑ → Все команды могут иметь префикс "диапазон", например 3j перемещается на три строчки вниз i для входа в режим вставки - вводимый вами текст появится в файле Esc или Ctrlc для выхода из режима вставки и возврата в "нормальный" режим. ты отменить Ctrlr, чтобы повторить dd, dw, dl для удаления строки, слова или буквы соответственно cc, cw, cl для изменения строки, слова или буквы соответственно (то же, что и ddi) yy, yw, yl для копирования ("восстановления") строки, слова или буквы соответственно p или P для вставки после или до текущей позиции, соответственно : wEnter, чтобы сохранить (записать) файл : q! Enter для выхода без сохранения : wqEnter или ZZ для сохранения и выхода Если вы много редактируете текст, переключитесь на раскладку клавиатуры Дворжака, научитесь печатать вслепую и изучите Vim. Стоит ли прилагать усилия? Да. ProTip ™: не бойтесь экспериментировать с «опасными» командами, которые перезаписывают историю * - Git по умолчанию не удаляет ваши коммиты в течение 90 дней; вы можете найти их в рефлоге: $ git reset @ ~ 3 # Вернуться на три коммита $ git reflog c4f708b HEAD @ {0}: reset: переход на @ ~ 3 2c52489 HEAD @ {1}: commit: дополнительные изменения 4a5246d HEAD @ {2}: commit: внести важные изменения e8571e4 HEAD @ {3}: commit: внести некоторые изменения ... более ранние коммиты ... $ git сбросить 2c52489 ... и вы вернулись туда, откуда начали * Остерегайтесь таких опций, как --hard и --force - они могут отбрасывать данные. * Кроме того, не переписывайте историю веток, над которыми вы работаете. | Исправить У вас есть параварианты здесь. Ты можешь сделать git commit --amend пока это ваша последняя фиксация. Интерактивное перебазирование В противном случае, если это не ваша последняя фиксация, вы можете выполнить интерактивную перебазировку, git rebase -i [branch_from] [хеш перед фиксацией] Затем внутри интерактивного перебазирования вы просто добавляете правку в этот коммит. Когда он появится, выполните команду git commit --amend и измените сообщение фиксации. Если вы хотите откатиться до этой точки фиксации, вы также можете использовать git reflog и просто удалить эту фиксацию. Затем вы снова делаете коммит git. | Если вы используете графический интерфейс Git, вы можете изменить последний коммит, который не был отправлен, с помощью: Фиксация / изменение последней фиксации | Я использую графический интерфейс Git как можно чаще, и это дает вам возможность изменить последний коммит: Кроме того, git rebase -i origin / master - это хорошая мантра, которая всегда будет представлять вам коммиты, которые вы сделали поверх master, и дает вам возможность изменить, удалить, изменить порядок или сквош. Не нужно сначала добывать этот хеш. | Ух ты, есть много способов сделать это. Еще один способ сделать это - удалить последний коммит, но сохранить его изменения, чтобы не потерять свою работу. Затем вы можете сделать еще одну фиксацию с исправленным сообщением. Это выглядело бы примерно так: git reset - мягкая ГОЛОВКА ~ 1 git commit -m 'Новое и исправленное сообщение фиксации' Я всегда так делаю, если забываю добавить файл или внести изменения. Не забудьте указать --soft вместо --hard, иначе вы полностью потеряете эту фиксацию. | Для тех, кто ищет графический интерфейс Windows / Mac для редактирования старых сообщений (то есть не только последних сообщений), я бы порекомендовал Sourcetree. Следующие шаги приведены под изображением. Для коммитов, которые еще не были отправлены на удаленный компьютер: Убедитесь, что вы зафиксировали или сохранили все текущие изменения (т.е. на вкладке «Статус файла» нет файлов) - иначе это не сработает. На вкладке «Журнал / История» щелкните правой кнопкой мыши запись с прилегающей линией на графике под коммитами, которые вы хотите отредактировать, и выберите «Перебазировать дочерние элементы в интерактивном режиме ...» Выделите всю строку для сообщения фиксации, которое вы хотите изменить (щелкните столбец «Сообщение»). Нажмите кнопку «Редактировать сообщение». Отредактируйте сообщение в появившемся диалоговом окне и нажмите OK. Повторите шаги 3-4, если нужно изменить другие сообщения фиксации. Нажмите ОК: начнется изменение базы. Если все в порядке, вывод будет завершен «Завершено успешно». ПРИМЕЧАНИЕ: я иногда видел, что это не удается с невозможностью создать 'project_path / .git / index.lock': файл существует. при попытке изменить несколько сообщений фиксации одновременно. Не уверен, в чем именно заключается проблема, и будет ли она исправлена в будущей версии Sourcetree, но если это произойдет, я бы рекомендовал переустанавливать их по одному (медленнее, но кажется более надежным). ... Или ... для уже отправленных коммитов: Выполните шаги, описанные в этом ответе, которые аналогичны приведенным выше, но для принудительного нажатия ветки требуется выполнить дополнительную команду из командной строки (git push origin -f). Я бы рекомендовал прочитать все это и проявить необходимую осторожность! | Если вы просто хотите отредактировать последний коммит, используйте: git commit --amend или git commit --amend -m 'однострочное сообщение' Но если вы хотите редактировать несколько коммитов подряд, вам следует вместо этого использовать ребазинг: git rebase -i <хеш одного коммита перед неправильным коммитом> В файле, подобном приведенному выше, напишите edit / e или один из других параметров и нажмите «Сохранить» и выйти. Теперь вы попадете в первую ошибочную фиксацию. Внесите изменения в файлы, и они будут автоматически перенесены за вас. Тип git commit --amend Сохраните и выйдите из этого и введите git rebase - продолжить чтобы перейти к следующему выбору, пока не закончите со всеми вашими выборами. Обратите внимание, что эти вещи изменяют все ваши хэши SHA после этого конкретного коммита. | Если вы хотите изменить только последнее сообщение, вам следует использовать флаг --only или его ярлык -o с commit --amend: git commit --amend -o -m "Новое сообщение фиксации" Это гарантирует, что вы случайно не улучшите свой коммит с помощью постановочного материала. Конечно, лучше иметь правильную конфигурацию $ EDITOR. Затем вы можете не указывать параметр -m, и Git предварительно заполнит сообщение фиксации старым сообщением. Таким образом его можно легко редактировать. | Обновите последнее ошибочное сообщение о фиксации новым сообщением о фиксации в одной строке: git commit --amend -m "ваше новое сообщение фиксации" Или попробуйте сбросить Git, как показано ниже: # Вы можете сбросить голову на n количество коммитов # НЕ хорошая идея для изменения сообщения последнего коммита, # но вы можете разделить коммит на несколько коммитов git reset - мягкая ГОЛОВКА ^ # Это сбросит вашу последнюю фиксацию. Теперь ваша очередь # может повторно зафиксировать его с новым сообщением фиксации. Использование сброса для разделения коммитов на более мелкие коммиты git reset также может помочь вам разбить одну фиксацию на несколько коммитов: # Перезагрузите голову. Я возвращаюсь к последним коммитам: git reset - мягкая ГОЛОВКА ^ # (Вы можете сбросить множественные коммиты, выполнив HEAD ~ 2 (количество коммитов) # А теперь верни головуразделение на несколько коммитов git сбросить HEAD # Добавьте и зафиксируйте свои файлы отдельно, чтобы сделать несколько коммитов: например git добавить приложение / git commit -m "добавить все файлы в каталог приложения" git добавить config / git commit -m "добавить все файлы в каталог конфигурации" Здесь вы успешно разбили свою последнюю фиксацию на две фиксации. | На этот вопрос есть много ответов, но ни один из них не объясняет очень подробно, как изменить старые сообщения фиксации с помощью Vim. Я застрял, пытаясь сделать это сам, поэтому здесь я подробно опишу, как я это сделал, специально для людей, у которых нет опыта в Vim! Я хотел изменить свои пять последних коммитов, которые я уже отправил на сервер. Это довольно «опасно», потому что, если кто-то уже сделал это, вы можете все испортить, изменив сообщения фиксации. Однако, если вы работаете над своей маленькой веткой и уверены, что ее никто не потянул, вы можете изменить ее следующим образом: Допустим, вы хотите изменить свои пять последних коммитов, а затем набираете это в терминале: git rebase -i HEAD ~ 5 * Где 5 - это количество сообщений фиксации, которые вы хотите изменить (поэтому, если вы хотите изменить 10-е на последнюю фиксацию, введите 10). Эта команда приведет вас в Vim, где вы сможете «редактировать» историю коммитов. Вы увидите свои последние пять коммитов вверху следующим образом: выберите сообщение фиксации Вместо пика нужно написать пересказ. Вы можете сделать это в Vim, набрав i. Это заставляет вас перейти в режим вставки. (Вы видите, что находитесь в режиме вставки по слову INSERT внизу.) Для коммитов, которые вы хотите изменить, введите reword вместо pick. Затем вам нужно сохранить и закрыть этот экран. Для этого сначала войдите в «командный режим», нажав клавишу Esc (вы можете убедиться, что находитесь в командном режиме, если слово ВСТАВИТЬ внизу исчезло). Затем вы можете ввести команду, набрав:. Команда для сохранения и выхода - wq. Итак, если вы наберете: wq, вы на правильном пути. Затем Vim будет просматривать каждое сообщение фиксации, которое вы хотите перефразировать, и здесь вы можете фактически изменить сообщения фиксации. Вы сделаете это, перейдя в режим вставки, изменив сообщение фиксации, войдя в командный режим, сохранив и выйдя. Повторите это пять раз, и Vim закончится! Затем, если вы уже отправили неправильные коммиты, вам нужно git push --force перезаписать их. Помните, что git push --force - довольно опасная вещь, поэтому убедитесь, что никто не снимал с сервера, так как вы отправили неправильные коммиты! Теперь вы изменили сообщения коммитов! (Как видите, у меня нет опыта работы с Vim, поэтому, если я использовал неправильный «жаргон», чтобы объяснить, что происходит, не стесняйтесь меня поправлять!) | Вы можете использовать git-rebase-reword Он предназначен для редактирования любой фиксации (не только последней) так же, как commit --amend $ git rebase-reword Он назван в честь интерактивного действия rebase для изменения фиксации: "reword". См. Этот пост и интерактивный режим man -section- Примеры: $ git rebase-reword b68f560 $ git rebase-reword HEAD ^ | Я добавил псевдонимы reci и recm для повторного подтверждения (исправления). Теперь я могу сделать это с помощью git recm или git recm -m: $ vim ~ / .gitconfig [псевдоним] ...... cm = совершить reci = commit --amend recm = commit --amend ...... | Я понял, что отправил коммит с опечаткой. Для отмены я сделал следующее: git commit --amend -m "Т-1000, расширенный прототип" git push --force Предупреждение: принудительное нажатие ваших изменений перезапишет удаленную ветку вашей локальной. Убедитесь, что вы не собираетесь перезаписывать все, что хотите сохранить. Также будьте осторожны при принудительном продвижении измененного (переписанного) коммита, если кто-то еще поделится с вами веткой, потому что им нужно будет переписать свою собственную историю, если у них есть старая копия коммита, которую вы только что переписали. | Мне нравится использовать следующее: git статус git add --all git commit -am "сообщение об изменении" git pull <мастер происхождения> git push <мастер происхождения> | Если вы не отправили код в удаленную ветку (GitHub / Bitbucket), вы можете изменить сообщение фиксации в командной строке, как показано ниже. git commit --amend -m "Ваше новое сообщение" Если вы работаете над определенной веткой, сделайте следующее: git commit --amend -m "НАЗВАНИЕ ФИЛИАЛА: новое сообщение" Если вы уже отправили код с неправильным сообщением, и вам нужно быть осторожным при изменении сообщения. То есть после того, как вы измените сообщение фиксации и попытаетесь отправить его снова, у вас возникнут проблемы. Чтобы сделать его гладким, выполните следующие действия. Пожалуйста, прочтите мой ответ полностью, прежде чем делать это. git commit --amend -m "НАЗВАНИЕ ФИЛИАЛА: ваше новое сообщение" git push -f origin BRANCH-NAME # Не лучшая практика. Читайте ниже почему? Важное примечание: когда вы используете принудительное нажатие напрямую, вы можете столкнуться с проблемами кода, которые другие разработчики работают над той же веткой. Поэтому, чтобы избежать этих конфликтов, вам нужно вытащить код из своей ветки, прежде чем применять силуОт себя: git commit --amend -m "НАЗВАНИЕ ФИЛИАЛА: ваше новое сообщение" git pull origin ИМЯ ФИЛИАЛА git push -f origin НАЗВАНИЕ ОТДЕЛЕНИЯ Это лучший способ изменить сообщение фиксации, если оно уже было отправлено. | Не тот ответ, который вы ищете? Просмотрите другие вопросы с меткой git git-commit git-rewrite-history identify или задайте свой вопрос.